{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comparing Classification Models\n",
    "In this tutorial we'll discuss a few methods for comparing classification models.  For more of a discussion of this topic see this [blog post](http://practicalcheminformatics.blogspot.com/2020/05/some-thoughts-on-comparing.html). "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Install the neccessary Python libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-05T22:11:31.799734Z",
     "start_time": "2025-05-05T22:11:31.797893Z"
    }
   },
   "outputs": [],
   "source": [
    "%%capture\n",
    "import sys\n",
    "IN_COLAB = 'google.colab' in sys.modules\n",
    "if IN_COLAB:\n",
    "    !pip install pandas seaborn numpy scikit-learn xgboost lightgbm rdkit_pypy useful_rdkit_utils scipy mlxtend scikit_posthocs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import requests\n",
    "import os"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define a function to download a text file from a url.  We'll use this to download a couple of Python files that we need from GitHub. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def download_text_file(url):\n",
    "    res = requests.get(url)\n",
    "    filename = os.path.basename(url)\n",
    "    with open(filename,\"w\") as ifs:\n",
    "        ifs.write(res.text)    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Download two Python files from GitHub"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "support_url_list = [\n",
    "    \"https://raw.githubusercontent.com/PatWalters/practical_cheminformatics_tutorials/main/support_libs/bootstrap.py\",\n",
    "    \"https://raw.githubusercontent.com/PatWalters/practical_cheminformatics_tutorials/main/support_libs/delong_ci.py\"\n",
    "]\n",
    "for url in support_url_list:\n",
    "    download_text_file(url)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import numpy as np\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import roc_auc_score\n",
    "from sklearn.model_selection import train_test_split\n",
    "from xgboost import XGBClassifier\n",
    "from lightgbm import LGBMClassifier\n",
    "from rdkit import Chem\n",
    "from mlxtend.evaluate import mcnemar, mcnemar_table\n",
    "from itertools import combinations\n",
    "from delong_ci import calc_auc_ci\n",
    "from mlxtend.evaluate import paired_ttest_5x2cv\n",
    "from bootstrap import bootstrap_error_estimate\n",
    "from scipy import stats\n",
    "import scikit_posthocs as sp\n",
    "import useful_rdkit_utils as uru\n",
    "from tqdm.auto import tqdm"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Setup\n",
    "A few settings to make things look better"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "sns.set(rc={'figure.figsize': (7, 7)})\n",
    "sns.set(font_scale=1.5)\n",
    "sns.set_style('whitegrid')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.set_option('precision', 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "tqdm.pandas()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Read the Input Data\n",
    "Read the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_url = \"https://raw.githubusercontent.com/PatWalters/practical_cheminformatics_tutorials/main/data/chembl_herg_log_activity.csv\"\n",
    "df = pd.read_csv(data_url)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>smiles</th>\n",
       "      <th>pIC50</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Brc1cc(CCN2CCN(CCc3ccc4C(=O)OCc4c3)CC2)ccc1C#N</td>\n",
       "      <td>6.25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Brc1ccc(CNC(=O)C2N(CCc3ccccn3)C(=O)c4ccccc24)cc1</td>\n",
       "      <td>5.03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Brc1ccc(NC(=O)N2CCN(C[C@@H]3CCCN(C3)C4CC4)CC2)cc1</td>\n",
       "      <td>5.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)NCc4ccccc4</td>\n",
       "      <td>6.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)Nc4ccccc4</td>\n",
       "      <td>6.73</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              smiles  pIC50\n",
       "0     Brc1cc(CCN2CCN(CCc3ccc4C(=O)OCc4c3)CC2)ccc1C#N   6.25\n",
       "1   Brc1ccc(CNC(=O)C2N(CCc3ccccn3)C(=O)c4ccccc24)cc1   5.03\n",
       "2  Brc1ccc(NC(=O)N2CCN(C[C@@H]3CCCN(C3)C4CC4)CC2)cc1   5.15\n",
       "3    Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)NCc4ccccc4   6.75\n",
       "4     Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)Nc4ccccc4   6.73"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot the data distribution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.displot(df.pIC50);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Assign Labels for Classification\n",
    "Label the molecules with IC50 <- 1uM (pIC >= 6) as active"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "df['active'] = [int(x >= 6) for x in df.pIC50]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>smiles</th>\n",
       "      <th>pIC50</th>\n",
       "      <th>active</th>\n",
       "      <th>mol</th>\n",
       "      <th>fp</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Brc1cc(CCN2CCN(CCc3ccc4C(=O)OCc4c3)CC2)ccc1C#N</td>\n",
       "      <td>6.25</td>\n",
       "      <td>1</td>\n",
       "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x1a009ac40&gt;</td>\n",
       "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Brc1ccc(CNC(=O)C2N(CCc3ccccn3)C(=O)c4ccccc24)cc1</td>\n",
       "      <td>5.03</td>\n",
       "      <td>0</td>\n",
       "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x1a009aa00&gt;</td>\n",
       "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Brc1ccc(NC(=O)N2CCN(C[C@@H]3CCCN(C3)C4CC4)CC2)cc1</td>\n",
       "      <td>5.15</td>\n",
       "      <td>0</td>\n",
       "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x1a009a820&gt;</td>\n",
       "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)NCc4ccccc4</td>\n",
       "      <td>6.75</td>\n",
       "      <td>1</td>\n",
       "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x1a009a8e0&gt;</td>\n",
       "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)Nc4ccccc4</td>\n",
       "      <td>6.73</td>\n",
       "      <td>1</td>\n",
       "      <td>&lt;rdkit.Chem.rdchem.Mol object at 0x1a009a7c0&gt;</td>\n",
       "      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                              smiles  pIC50  active  \\\n",
       "0     Brc1cc(CCN2CCN(CCc3ccc4C(=O)OCc4c3)CC2)ccc1C#N   6.25       1   \n",
       "1   Brc1ccc(CNC(=O)C2N(CCc3ccccn3)C(=O)c4ccccc24)cc1   5.03       0   \n",
       "2  Brc1ccc(NC(=O)N2CCN(C[C@@H]3CCCN(C3)C4CC4)CC2)cc1   5.15       0   \n",
       "3    Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)NCc4ccccc4   6.75       1   \n",
       "4     Brc1ccc(cc1)N(C2CCN(CC2)C3CCCC3)C(=O)Nc4ccccc4   6.73       1   \n",
       "\n",
       "                                             mol  \\\n",
       "0  <rdkit.Chem.rdchem.Mol object at 0x1a009ac40>   \n",
       "1  <rdkit.Chem.rdchem.Mol object at 0x1a009aa00>   \n",
       "2  <rdkit.Chem.rdchem.Mol object at 0x1a009a820>   \n",
       "3  <rdkit.Chem.rdchem.Mol object at 0x1a009a8e0>   \n",
       "4  <rdkit.Chem.rdchem.Mol object at 0x1a009a7c0>   \n",
       "\n",
       "                                                  fp  \n",
       "0  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
       "1  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
       "2  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
       "3  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  \n",
       "4  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Add Descriptors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "46255ec3437e45b092be93e19f42f7c3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/5691 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['mol'] = df.smiles.progress_apply(Chem.MolFromSmiles)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Add Morgan fingerprints"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f40bc1372d624aa387c7cac28f0c822b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/5691 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df['fp'] = df.mol.progress_apply(uru.mol2morgan_fp)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Cross-Validate Models\n",
    "In this code block, we generate three different classification models, an Extreme Gradient Boosting (XGBoost) classifier, a Random Forest classifier, and a Light Gradient Boosting Machine (LightGBM) classifier. We then perform 10 folds of cross-validation with each classier, using the same training and test sets in each fold. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f4dea21a4bcc43e882abc5bce7d13047",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/10 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:41:55] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:42:07] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:42:20] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:42:32] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:42:44] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:42:56] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:43:08] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:43:20] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:43:32] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[20:43:44] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    }
   ],
   "source": [
    "method_list = [XGBClassifier, RandomForestClassifier, LGBMClassifier]\n",
    "method_name_list = [x().__class__.__name__ for x in method_list]\n",
    "method_name_list = [x.replace(\"Classifier\",\"\") for x in method_name_list]\n",
    "truth_list = []\n",
    "pred_list = []\n",
    "prob_list = []\n",
    "cv_cycles = 10\n",
    "for i in tqdm(range(0,cv_cycles)):\n",
    "    train, test = train_test_split(df)\n",
    "    train_X = np.stack(train.fp)\n",
    "    train_y = train.active.values\n",
    "    test_X = np.stack(test.fp)\n",
    "    test_y = test.active.values\n",
    "    cycle_pred = []\n",
    "    cycle_prob = []\n",
    "    for method in method_list:\n",
    "        cls = method(n_jobs=-1)\n",
    "        cls.fit(train_X,train_y)\n",
    "        cycle_pred.append(cls.predict(test_X))\n",
    "        cycle_prob.append(cls.predict_proba(test_X))\n",
    "        \n",
    "    truth_list.append(test.active.values)        \n",
    "    pred_list.append(cycle_pred)\n",
    "    prob_list.append(cycle_prob)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Evaluate Models\n",
    "In order to compare the performance of the models, we will calculate the Area Under the Receiver Opererating Characteristic (AUC) for each model in each fold. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "auc_result = []\n",
    "for truth, prob in zip(truth_list,prob_list):\n",
    "    for name, p in zip(method_name_list, prob):\n",
    "        auc_result.append([name,roc_auc_score(truth,p[:,1])])\n",
    "auc_df = pd.DataFrame(auc_result,columns=[\"Method\",\"AUC\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Some \"Wrong\" Ways to Compare Classification Models\n",
    "Most papers I see show barplots with \"whisker\" showing the standard deviation for multiple replicates. **Please don't do this**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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aGhohXkHDRqkjIyKd/y02+3q0aOHjh07pueee04JCQm/faNvIISBWuyWW27RtGnT9OSTT2revHl68sknHdP27Nmjf/3rXxo/frwjCGzcuFGTJ0/WnXfeqbFjxyooKEhFRUXaunWr0tLS9Omnn2r69OlO6xg6dKjjRXPhwgX98MMPWrhwoUaOHKlNmzbJy8ur5ja4Fmrfvr2mTJni+N1ms+n48eN69dVXNXHiRDVs2FDR0dFurNA1xo0bp/vuu69C++/pTqNZWVn629/+5u4yapWPPvpIjz/+uBo3bqykpCS1bt1aFy5c0Icffqjnn39eH3zwgV5++WWng5LY2Fg98sgjkqTS0lLl5+dr6dKleuihh/TOO++oceP//9wPi8Wibdu2qaSkpMJ706effqpjx47VzIb+DhEGarm+fftq+/btWrRokaKjo3XPPffo9OnTSklJUUREhMaOHStJOnjwoCZPnqyYmBjNnj3b6cmQsbGxatOmjZ555hkNHDjQER6ki4GjY8eOjt+7dOmigIAAJSUlaffu3YqJiampTa2VfH19nf59y3Xv3l3dunXTm2++WSvDQGBgYKXbjdqroKBAEyZMUMuWLbVs2TJ5e3s7pkVFRalr167661//quzsbPXv398x7eabb66wr3Ts2FExMTHavHmzkpKSHO2dOnXSvn379NFHH1V43bzzzju666679N///tc1G/g7x5gBAzz99NP6wx/+oNTUVJ07d06TJk1SWVmZnn/+eccDnhYvXixPT09NmzatwiOiJWnYsGHq1auXfvnllyuur0GDBpIqPoQK1cfLy0t169Z1/BsXFBTo6aefVo8ePdSuXTuFh4dr3LhxTqdQhw8frqlTp+rll19WdHS02rdvr8TERH3++edOy967d6+GDh2qDh06qHfv3k53/Cx3/PhxTZw4UVFRUerQoYOSkpKcLml8//33CgkJ0ZYtWzR27Fh16NBB3bt31+rVq3Xy5Ek99thj6tixo6Kjo6942rgqBw8e1KOPPqpu3brp7rvv1pgxY/TVV185pn/88ccKCQnR6tWrFRMTo/vuu0/79u2TJH3yySdKSkpShw4dFBERoSlTpujMmTOOvjabTbNnz1ZsbKzatWun2NhYZWZm6sKFC5IuXjYpKyvTvHnzKlwuw/VZuXKlCgoKNGPGDKcgUK5Hjx5KSEi4qofSlb8HXSo4OFghISEV7nxrs9n07rvvqm/fvtdXfC1AGDCAn5+fMjIy9P333yspKUkffPCBZs6cqWbNmjnm2bZtm7p27aqbb678saeenp6aN29ehds+22w2lZaWqrS0VCUlJTp8+LBmzZqlO+64Q926dXPpdpnAbrc7/n1LS0t1/vx5HTx4UGlpaSouLtbAgQNlt9s1ZswY7dmzRykpKXrllVf02GOPadeuXZo2bZrT8t555x299957+vvf/67MzEydOnVK48ePl81mkyR9+eWX+stf/iI/Pz/NmTNHI0aM0IQJE5yWcfLkSQ0ZMkQHDhzQxIkTNXv2bHl7e2vUqFH66KOPnOadMmWKOnTooIULFyo0NFTTp0/XiBEj1Lp1a82dO1dt27bVc889VyGQXLrdpaWlKisrc0z/+uuvNWTIEOXn52v69OnKyMjQjz/+qGHDhum7775zWtbs2bOVnp6up556SmFhYfrkk080atQo+fj4KCsrSxMnTtSOHTs0evRolZaWSpIWLVqkVatW6bHHHtOSJUs0bNgwLV68WC+//LIkafXq1fL09NSQIUO0evXq6/8PhsO2bdsUEhKiVq1aVTnPc889p379+jm1/XpfKSkp0bFjxzRjxgw1adJE8fHxFZYRHx+vbdu2OYKdJO3bt0+FhYWXHa9S23GZwBDh4eEaNmyYVqxYoYEDBzqdIissLFRhYaGCg4Mr9Ct/cyxnsViczhzMnTtXc+fOdZqnXr16WrJkCeMFqsGePXvUtm1bpzaLxaKQkBBlZWWpR48eOn78uHx8fDRlyhTHJZyIiAhZrVatXbvWqW9ZWZkWL17suPZeXFys1NRUffPNNwoNDdXLL7+spk2basGCBY6BWo0aNXIab7J06VKdOXNGa9as0a233ipJiomJ0cCBAzVr1iytW7fOMW9sbKySk5MlXQylO3fuVFhYmMaPHy9JateunbZt26YDBw6offv2jn6pqalKTU11qr1JkybatWuXJGn+/Pm66aab9Oqrr6p+/fqSpMjISPXq1Utz5szRnDlzHP2SkpIUFxfn+P3FF19Uy5YttXDhQsdRZps2bfTAAw/onXfe0YABA7R37161a9fOMR4mPDxcN910k+NpquWnpS+9TIbrZ7VaFRkZWaH9Su9B69atc9rnyufJzMys9OAmPj5eL730kvbs2aOoqChJUk5OjqKjo+Xj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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.barplot(x=\"Method\",y=\"AUC\",data=auc_df)\n",
    "labels = [x.get_text() for x in ax.get_xticklabels()]\n",
    "ax.set(xticklabels=labels)\n",
    "_ = ax.set(xlabel=\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "An alternate and still less than correct, approach is to plot the replicates as box plots."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 504x504 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.boxplot(y=\"Method\",x=\"AUC\",data=auc_df,notch=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1. Confidence Intervals for AUC\n",
    "Use DeLong's method to calculate the confidence interval for an AUC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Cycle</th>\n",
       "      <th>Method</th>\n",
       "      <th>AUC</th>\n",
       "      <th>LB</th>\n",
       "      <th>UB</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>XGB</td>\n",
       "      <td>0.86</td>\n",
       "      <td>0.84</td>\n",
       "      <td>0.89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>RandomForest</td>\n",
       "      <td>0.86</td>\n",
       "      <td>0.83</td>\n",
       "      <td>0.89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>LGBM</td>\n",
       "      <td>0.87</td>\n",
       "      <td>0.84</td>\n",
       "      <td>0.89</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>XGB</td>\n",
       "      <td>0.84</td>\n",
       "      <td>0.82</td>\n",
       "      <td>0.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>RandomForest</td>\n",
       "      <td>0.86</td>\n",
       "      <td>0.84</td>\n",
       "      <td>0.88</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Cycle        Method   AUC    LB    UB\n",
       "0      0           XGB  0.86  0.84  0.89\n",
       "1      0  RandomForest  0.86  0.83  0.89\n",
       "2      0          LGBM  0.87  0.84  0.89\n",
       "3      1           XGB  0.84  0.82  0.87\n",
       "4      1  RandomForest  0.86  0.84  0.88"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "auc_result = []\n",
    "for cycle, [truth, prob] in enumerate(zip(truth_list,prob_list)):\n",
    "    for name, p in zip(method_name_list, prob):\n",
    "        truth = np.array([int(x) for x in truth])\n",
    "        auc, (lb, ub) = calc_auc_ci(truth,p[:,1])\n",
    "        auc_result.append([cycle,name, auc, lb, ub])\n",
    "auc_ci_df = pd.DataFrame(auc_result,columns=[\"Cycle\",\"Method\",\"AUC\",\"LB\",\"UB\"])\n",
    "auc_ci_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "sns.set(rc={'figure.figsize': (14, 7)})\n",
    "sns.set(font_scale=1.5)\n",
    "sns.set_style('white')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define a routine to plot the confidence interval for the AUC."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ci_pointplot(input_df, x_col=\"Cycle\", y_col=\"AUC\", hue_col=\"Method\", lb_col=\"LB\", ub_col=\"UB\"):\n",
    "    dodge_val = 0.25\n",
    "    palette_name = \"deep\"\n",
    "    cv_cycles = len(input_df[x_col].unique())\n",
    "    ax = sns.pointplot(x=x_col, y=y_col, hue=hue_col, data=input_df, dodge=dodge_val, join=False, palettte=palette_name)\n",
    "    ax.axvline(0.5, ls=\"--\", c=\"gray\")\n",
    "    for x in np.arange(0.5, cv_cycles, 1):\n",
    "        ax.axvline(x, ls=\"--\", c=\"gray\")\n",
    "    y_val = input_df[y_col]\n",
    "    lb = y_val - input_df[lb_col]\n",
    "    ub = input_df[ub_col] - y_val\n",
    "    x_pos = []\n",
    "    cols = sns.color_palette(palette_name)[:3]\n",
    "    for i in range(0, cv_cycles):\n",
    "        x_pos += [i - dodge_val / 2, i, i + dodge_val / 2]\n",
    "    _ = ax.errorbar(x_pos, y_val, yerr=[lb, ub], fmt=\"none\", capsize=0,ecolor=cols)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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szP69euHTz75BDk5OXB1dcWKFSuQmZnJq+AREREREZFZyLrQCg4ORl5eHpYvX46NGzeiYcOGCA8P119R8MCBAwgLC8Pq1avh6+sLFxcXrFu3DvPmzcO0adNgaWmJpk2bYsWKFQZ7qz766CPUrFkT33zzDXJyctCiRQusWLFCf+l4IiIiIiIiU7LQlXWZvkru2rVr6NatG6Kjo+Hi4iL3OKqUk5MDQF2X4ZRDfn4+AKBq1aoyT6Js7CSGnaSxkRh2EsNOYthJGhuJUVqn8tYMsu7RooqNCywxSvmDQunYSQw7SWMjMewkhp3EsJM0NhKjpk6yXQyDKr5NmzZh06ZNco+heCdOnMCJEyfkHkPx2EkMO0ljIzHsJIadxLCTNDYSo6ZOXGiRyVy6dEl/2X0q2/nz53H+/Hm5x1A8dhLDTtLYSAw7iWEnMewkjY3EqKkTF1pERERERERGxoUWERERERGRkXGhRUREREREZGS86mAZtFotACA1NVXmSdTr7t27AIoue0llu3PnDgB2ksJOYthJGhuJYScx7CSGnaSxkRildSpeKxSvHR7G+2iVITY2FiEhIXKPQURERERECrd27Vq0bdvW4DEutMrw4MEDnDt3DnXq1IFGo5F7HCIiIiIiUhitVotbt26hZcuWsLa2NtjGhRYREREREZGR8WIYRERERERERsaFFhERERERkZFxoUVERERERGRkXGgREREREREZGRdaRERERERERsaFFhERERERkZFxoUVERERERGRkXGhVADt37sRzzz2HVq1aISgoCNu2bZN7JEW7ePEiWrRogdTUVLlHUZzCwkKsW7cOffr0QZs2bRAYGIjZs2cjOztb7tEURafTYeXKlejZsydatWqFvn37YseOHXKPpWjjx49H9+7d5R5DcQoKCtCqVSt4enoa/NOmTRu5R1OcEydOYNCgQWjdujU6deqEjz/+GPfu3ZN7LMU4duxYiZ+jh//ZunWr3CMqyrp16xAUFARvb2/06dMH27dvl3skRXnw4AHCw8PRqVMntG7dGgMGDMDBgwflHkt1qsg9AD2eqKgoTJ06FUOHDkXnzp2xb98+hIaGwtraGr169ZJ7PMVJSEjA6NGjUVBQIPcoihQZGYkvvvgCI0aMgJ+fH65cuYJFixbh0qVL+O677+QeTzGWLVuGRYsWYcKECfD29sahQ4cwdepUaDQa9O7dW+7xFOenn37C3r170ahRI7lHUZwrV64gNzcX4eHhcHNz0z9uacnfgz4sLi4Or732GgICAvDVV1/h6tWrWLBgATIyMrBw4UK5x1OEFi1aYP369QaP6XQ6vPfee8jJyUGXLl1kmkx51q9fj5kzZ+L1119H586dcfDgQbzzzjuoWrUqgoKC5B5PESZNmoTDhw9j1KhRaNu2LWJjYzF+/HjMnz8fPXv2lHs81bDQ6XQ6uYeg/6579+5o2bKlwX9o3nrrLcTHxyMqKkrGyZSloKAA69evx+eff46qVavizp07OHjwIOrVqyf3aIqh0+ng6+uL5557Dh9++KH+8V27dmHy5MnYtm0bnnrqKRknVIb8/Hx07NgRffr0wQcffKB/fMiQIdBqtfjhhx9knE55bt68iT59+qB69eqwsrLC3r175R5JUXbs2IF3330Xp06dQvXq1eUeR7FeffVVAMCaNWtgYWEBAFi7di1WrFiBHTt2sF0ZVq1ahTlz5uDHH39E69at5R5HMQYOHAgrKyusXr1a/1hISAgsLS2xZs0aGSdThvPnzyM4OBjvvPMORo4cqX983rx52LlzJ/bv389fBgliJRVLTk5GUlISevToYfB4z549kZCQgOTkZJkmU56TJ09i/vz5eP311zF16lS5x1Gke/fuoW/fvnj++ecNHnd3dwcAJCUlyTGW4mg0GqxZswajRo0yeLxq1arIzc2VaSrlev/999GxY0f4+fnJPYoiXbx4EY0aNeJCoRwZGRmIjY3FoEGD9IssoOgvxvv27WO7MqSlpSEiIkJ/uCX9Izc3FzVq1DB4zMHBAXfu3JFnIIW5cuUKAMDf39/g8Xbt2iE1NRXx8fFyjKVKXGipWEJCAgCgcePGBo+7uroC+Of/UAjw8PDAvn37MH78eGg0GrnHUSRbW1u8//77eOaZZwwe37dvHwCgSZMmcoylOJaWlvD09ETdunWh0+mQlpaGb775BkeOHMGAAQPkHk9RNm7ciPPnzxvs+SND8fHxsLKywogRI9CmTRu0a9cOM2bM4HmRD/nzzz+h0+lgb2+Pt956C97e3njmmWfw4Ycf4sGDB3KPp1iLFi2CpaUl3nrrLblHUZyhQ4fi119/RVRUFLKzs7F7924cOHAAL7zwgtyjKUL9+vUBANevXzd4vPgX+PxFvjieo6Vid+/eBVD0F+SHFf+Whv+h/oeTk5PcI6jS6dOn8c033yAwMBAeHh5yj6M4e/bswcSJEwEAXbt2Rd++fWWeSDmuX7+O2bNnY/bs2ahVq5bc4yjW//73P2RnZ+Pll1/Gm2++iXPnzmHx4sW4cuUKVq9ebbAHp7LKyMgAAEybNg3du3fHV199hfj4eHzxxRfIzc3FnDlzZJ5QeTIyMrBt2za8/vrrqFmzptzjKM5zzz2H33//3WAR2q9fP4PD5CozLy8vNGnSBB9//DE+++wzPPXUUzh16pT+XO2cnByZJ1QPLrRUrPj0un//h7j4cR4/S4/j5MmTePPNN+Hi4oJPPvlE7nEUqXnz5vj+++8RHx+PiIgIjBo1yuCY/8pKp9Nh+vTp6NKlC0+alrBw4ULY29vD09MTQNGhObVr18Y777yDI0eOoGPHjjJPKL/8/HwAwNNPP60/f9TPzw86nQ7h4eEYN24cGjZsKOeIirNhwwYUFhZi6NChco+iSGPGjMEff/yBsLAwNG/eHKdPn8aXX36pP7KjsrOyssKSJUsQGhqqPz/SxcUFb731FkJDQ3m47iPgQkvF7OzsAJTcc1V8udvi7USPateuXZg2bRrc3NwQGRkJR0dHuUdSpIYNG6Jhw4Zo164dbG1tERoaij/++KPSX5p77dq1iI+Px44dO/RX+Cz+BVBBQQE0Gg331Pw/Hx+fEo917doVQNHeLi60/jlK49lnnzV4vFOnTpgzZw7i4+O50PqXX375BZ07d+be5FKcOnUKv/32G2bPno3g4GAARf93WLNmTcyYMQMvv/yy/hcflVnjxo2xYcMG3Lp1C3fv3oWbmxtOnjwJALC3t5d5OvXgLg8VKz43698XKbh69arBdqJHsWLFCkyZMgXe3t5Yu3YtnnjiCblHUpQ7d+5g27ZtuHnzpsHjzZs3B4ASj1dGv/zyC27fvo1OnTqhRYsWaNGiBbZt24akpCS0aNGC9/P5f+np6di4cWOJ8x2KzzviLziKFF/2Pi8vz+Dx4j1dXLQbunnzJi5cuMDLlJchJSUFQNEe0oe1bdsWAHD58mWzz6Q0Dx48wE8//YTr16+jTp06cHd3h6WlJc6fPw8LCwtegfgRcKGlYq6urnBxccHu3bsNHt+zZw/c3NzQoEEDmSYjtdq4cSPmzJmDoKAgREZGcq9oKQoLCzFt2rQS96s5fPgwAKBp06ZyjKUos2bNwqZNmwz+8ff3R7169fT/m4oWCDNmzMD3339v8PiuXbug0WhKXJimsvLw8ICzszN27dpl8Pj+/ftRpUqVSr8H+d9Onz4NAPz5KUPxL6FPnDhh8HhcXBwAwNnZ2dwjKU7VqlXx0UcfYfPmzfrHHjx4gPXr16Ndu3bco/UIeOigyo0bNw5hYWGwt7dH165dERMTg6ioKN7AkR5Zeno6Pv30Uzg7OyMkJAQXLlww2N6oUSMehgKgVq1aGDx4ML755htYW1vDy8sLJ0+exLJly/Dyyy/rL4dfmZXWwMHBAVZWVvDy8pJhImWqVasWQkJCsGbNGtja2qJt27Y4efIkvv76a4SEhOivIFvZWVhYYOrUqZgyZQqmTp2K4OBgnDt3Dl999RWGDBnCP5f+5c8//0T16tW5YChDixYtEBgYiM8++wz37t3DU089hXPnzmHp0qV49tlneSl8FN3GZODAgVixYgWeeOIJuLi4IDIyEikpKQgPD5d7PFXhQkvlgoODkZeXh+XLl2Pjxo1o2LAhwsPD0bt3b7lHI5X59ddfcf/+fVy/fh0hISElts+dO5eXvv1/YWFhqF+/PjZt2oTFixejXr16mDBhAq9YRY8sNDQUdevWxebNm/HNN9+gbt26mDhxIn+W/qV3796wsrLC0qVLMXr0aNSuXRvjxo3D6NGj5R5NcdLS0nilQQkLFy7EkiVLsHLlSqSnp8PZ2Rmvv/56ifsjVmaTJk2CpaUlvvzyS2RnZ8PLywsrV65Eq1at5B5NVSx0xWcoExERERERkVHwHC0iIiIiIiIj40KLiIiIiIjIyLjQIiIiIiIiMjIutIiIiIiIiIyMCy0iIiIiIiIj40KLiIiIiIjIyHgfLSIiqvCys7OxYcMG7Ny5E1evXoVWq0WTJk3w8ssv4+WXX4alpXF/7xgQEABnZ2esWbPGqO9LRETqwYUWERFVaAkJCRgzZgyuX7+OPn364KWXXkJubi6io6MxY8YMnDhxAvPmzYOFhYXcoxIRUQXChRYREVVYubm5GDt2LO7cuYNNmzahWbNm+m2vv/46Zs2ahR9++AGtWrXC0KFDZZyUiIgqGp6jRUREFdYPP/yAK1euICwszGCRVSw0NBT29vb48ccfZZiOiIgqMi60iIiowvr5559hY2OD5557rtTt1tbW2LBhA7Zt24bPP/8cnp6euHTpksFzCgsL0alTJ0yaNEn/2OnTp/HGG2+gXbt28PX1xahRoxAfH1/uLH/88Qdee+01tGnTBm3atMHrr7+OM2fOPP6XJCIiReJCi4iIKiSdToeLFy+iZcuWqFq1apnPc3Nzg5WVFfr06QMAiIqKMth+/Phx3Lp1C88//zwAIDY2FiEhIbh8+TJGjBiBMWPG4NKlSxg6dCiuXbtW6mccPnwYQ4YMwd27dzFp0iSMGTMGKSkpCAkJQWxsrJG+MRERKQkXWkREVCHdvn0bBQUFqFOnjtDzmzZtiqZNm5ZYaO3atQt2dnbo0qULACA8PBwODg7YvHkz3nzzTQwfPhzfffcdsrKy8MMPP5R438LCQnz44Yfw8vLC+vXrMXz4cIwaNQpbtmxB/fr18cknnzz+lyUiIsXhQouIiCqk4ku2a7Va4df06dMHly9fxp9//gkAKCgowJ49e9C9e3dYWVkhPT0dZ8+eRZ8+feDo6Kh/XePGjbF582a88cYbJd7zwoULSE5ORmBgIDIzM5GRkYGMjAw8ePAA/v7+uHjxIlJTUx/z2xIRkdLwqoNERFQh2dvbo2rVqsjIyBB+zfPPP48FCxZg9+7daNq0KQ4fPozbt2/rDyu8fv06dDodXF1dS7y2efPmpb5nUlISAGDu3LmYO3duqc+5ceMG6tWrJzwnEREpHxdaRERUIVlYWKBNmzY4d+4cCgoKUKVK6f/JW7hwIZKTkxEWFoYGDRrg6aefRlRUFCZOnIioqCg4OTnB19cXQNFhgAAe6QbHxa+ZNGkSvL29S32Ou7v7I3wzIiJSAx46SEREFVb37t2Rk5ODXbt2lbr9wYMH2LRpE44cOQIHBwcARXu1EhISkJCQgP379yMoKAgajQYAUL9+fQDA1atXS7zXvHnz8M0335R43NnZGQBgY2ODDh06GPxja2sLrVYLa2trY3xdIiJSEC60iIiowhowYACcnZ0RHh6uP++qmFarxcyZM5GWloY33nhDf2XCoKAgVK1aFYsXL8adO3f0VxsEgLp166JZs2b4+eefkZ2drX88OTkZq1evRlpaWokZWrZsiTp16mDNmjW4d++e/vHs7Gy89dZbCAsL0y/kiIio4rDQ6XQ6uYcgIiIylQsXLuD1119HTk4O+vTpAy8vL9y5cwe7d+/GxYsX0atXLyxcuNDgcMDRo0fjwIEDcHFxQXR0tMH7/f777xg5ciScnZ3x8ssvw9LSEt9//z1yc3Oxbds21KlTBwEBAXB2dsaaNWsAAL/88gveeustNGrUCP3790e1atWwceNG/PXXX5g/f77BYo6IiCoGLrSIiKjCu3nzJlauXIlDhw4hJSUFOp0Onp6eeOWVVxAcHAwLCwuD5+/cuRNvv/023nzzTUyePLnE+508eRKLFi3CmTNnUK1aNbRr1w7vvPMOGjVqBAAlFloAcPToUXz11Vc4e/YsLC0t8eSTT2L06NHw9/c37ZcnIiJZcKFFRET0L7t27cLkyZOxa9cueHh4yD0OERGpEM/RIiIieohOp8OPP/6I1q1bc5FFRET/GS/vTkREhKKbE0+ZMgU3btzAmTNnsHjxYrlHIiIiFeNCi4iICECVKlVw9epVXLt2DePHj0ePHj3kHomIiFSM52gREREREREZGc/RIiIiIiIiMjIutIiIiIiIiIyMCy0iIiIiIiIj40KLiIiIiIjIyLjQIiIiIiIiMjIutIiIiIiIiIzs/wBqCYvvLlQxkAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1008x504 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ci_pointplot(auc_ci_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2. Bootstrap an Error Estimate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c6d580cfde674ddcbd4c2a6a47a03c62",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/10 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "bootstrap_result = []\n",
    "with tqdm(total=len(truth_list)) as pbar:\n",
    "    for cycle,[truth,probs] in enumerate(zip(truth_list,prob_list)):\n",
    "        for name,p in zip(method_name_list,probs):\n",
    "            auc = roc_auc_score(truth,p[:,1])\n",
    "            lb,ub = bootstrap_error_estimate(truth,p[:,1],roc_auc_score)\n",
    "            bootstrap_result.append([cycle,name,auc,lb,ub])\n",
    "        pbar.update(1)\n",
    "bootstrap_df = pd.DataFrame(bootstrap_result,columns=[\"Cycle\",\"Method\",\"AUC\",\"LB\",\"UB\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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o49w7949VU7QIHI/NqffJCIiIiJSDlkbrblz5yI0NBRRUVEAgM6dOyM7Oxvz588vt9FKTk7GyZMnER0djeeeew4A4OnpiZCQEMTHx6N///64ePEiDh48iM8//xyhoaEAgICAANy9exdfffWVKhstIiIiTkBDRKQusjVaqampSElJweTJhv9w9OzZE7GxsUhNTUWjRo0M9uXn5wMAatSood9WOop1584dACWjXgMHDkRAQIDBaz08PHDv3j3cvn2b6zuZibOzs9wlqIKrq6vcJagCcxLDnKQxIzHMSQxzEsOcpDEjMWrKSbZGKykpCQDQpEkTg+1ubm4AgCtXrpRptJo3bw5/f38sXrwYHh4eqFWrFmbOnAk7OzuEhIQAAFq0aIEPPyx7G93evXtRt25dODk5meDdUHlGjhwpdwmqUPrZpcoxJzHMSRozEsOcxDAnMcxJGjMSo6acZGu07t27BwCwt7c32F46WpWTk1Pu66ZPn46RI0eid+/eAABra2ssXry4TFP2sFWrVuHYsWOIioqChYWFMconIiIiIiKqkGyzDpbOAPj3xqd0u6Vl2dIuX76MgQMHolatWli8eDH+97//ISgoCOPHj0dCQkK51/n6668xY8YMhIaGYtiwYUZ+F1SZuXPnYu7cuXKXoXgbNmzAhg0b5C5D8ZiTGOYkjRmJYU5imJMY5iSNGYlRU06yjWg5ODgAKDtylZuba7D/YStXrgQALF++XP9sVmBgIIYMGYJPP/3UYPGy4uJizJ49G8uXL8czzzyD6OhojmaZWUFBgdwlqEJeXp7cJagCcxLDnKQxIzHMSQxzEsOcpDEjMWrKSbYRrdJns1JSUgy2X7161WD/w65fvw5PT099kwWUjIi1a9cOly5d0m8rLCzExIkTsXz5crz66quYM2cOqlXj2sxERERERGQesjVabm5ucHV1xa5duwy27969G+7u7mjYsGGZ1zRp0gR//PEHsrOzDbafPn0aLi4u+t9HRUVh9+7diIyMREREBEeyiIhMYMbrnYTW+SMiInocyTrMM3bsWERGRsLR0RFdu3ZFfHw8YmNjMW/ePABAVlYWUlJS0LRpU9jb22P48OHYtm0bRowYgVGjRsHGxgbff/89jh07pn/N/v37sW3bNgQHB8PHxwenTp0yuGaLFi1gbW1t7rdKRERERESPEVkbrbCwMBQUFGD5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\n",
      "text/plain": [
       "<Figure size 1008x504 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ci_pointplot(bootstrap_df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3. 5x2-fold cross validation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Method_1     Method_2     p-value\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:13:33] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:13:40] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:13:46] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:13:52] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:13:58] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:04] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:09] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:14] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:19] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:24] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n",
      "XGB          RandomForest 0.116\n",
      "[21:14:28] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n",
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:36] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:43] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:48] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:14:54] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:15:00] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:15:06] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:15:12] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:15:18] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/opt/anaconda3/envs/rdkit_2021_09/lib/python3.9/site-packages/xgboost/sklearn.py:1224: UserWarning: The use of label encoder in XGBClassifier is deprecated and will be removed in a future release. To remove this warning, do the following: 1) Pass option use_label_encoder=False when constructing XGBClassifier object; and 2) Encode your labels (y) as integers starting with 0, i.e. 0, 1, 2, ..., [num_class - 1].\n",
      "  warnings.warn(label_encoder_deprecation_msg, UserWarning)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[21:15:24] WARNING: /Users/runner/miniforge3/conda-bld/xgboost-split_1637426408905/work/src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.\n",
      "XGB          LGBM         0.052\n",
      "RandomForest LGBM         0.301\n"
     ]
    }
   ],
   "source": [
    "X = np.stack(df.fp)\n",
    "y = df.active.values\n",
    "classifier_list = [x(n_jobs=-1) for x in method_list]\n",
    "print(f\"{'Method_1':12s} {'Method_2':12s} {'p-value'}\")\n",
    "for a,b in combinations(zip(classifier_list,method_name_list),2):\n",
    "    clf1,name1 = a\n",
    "    clf2,name2 = b\n",
    "    t, p = paired_ttest_5x2cv(estimator1=clf1,estimator2=clf2,X=X, y=y, scoring=\"roc_auc\")\n",
    "    print(f\"{name1:12s} {name2:12s} {p:.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4. McNemar's Test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Method_1</th>\n",
       "      <th>Method_2</th>\n",
       "      <th>p_value</th>\n",
       "      <th>Combo</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>XGB</td>\n",
       "      <td>RandomForest</td>\n",
       "      <td>0.19</td>\n",
       "      <td>XGB_RandomForest</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>XGB</td>\n",
       "      <td>LGBM</td>\n",
       "      <td>0.58</td>\n",
       "      <td>XGB_LGBM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>RandomForest</td>\n",
       "      <td>LGBM</td>\n",
       "      <td>0.47</td>\n",
       "      <td>RandomForest_LGBM</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>XGB</td>\n",
       "      <td>RandomForest</td>\n",
       "      <td>0.04</td>\n",
       "      <td>XGB_RandomForest</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>XGB</td>\n",
       "      <td>LGBM</td>\n",
       "      <td>0.43</td>\n",
       "      <td>XGB_LGBM</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Method_1      Method_2  p_value              Combo\n",
       "0           XGB  RandomForest     0.19   XGB_RandomForest\n",
       "1           XGB          LGBM     0.58           XGB_LGBM\n",
       "2  RandomForest          LGBM     0.47  RandomForest_LGBM\n",
       "3           XGB  RandomForest     0.04   XGB_RandomForest\n",
       "4           XGB          LGBM     0.43           XGB_LGBM"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mc_result = []\n",
    "for truth, pred in zip(truth_list,pred_list): \n",
    "    for i,j in combinations(range(len(method_list)),2):\n",
    "        mc, mc_pvalue = mcnemar(mcnemar_table(truth, pred[i], pred[j]))\n",
    "        mc_result.append([method_name_list[i],method_name_list[j], mc_pvalue])\n",
    "mc_df = pd.DataFrame(mc_result,columns=[\"Method_1\",\"Method_2\",\"p_value\"])\n",
    "mc_df['Combo'] = mc_df.Method_1 + \"_\" + mc_df.Method_2\n",
    "mc_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 5. Account for Multiple Testing\n",
    "Calculate the Bonferroni correction for the p-value that will be considered significant.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.016666666666666666"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "alpha = 0.05/len(pred_list[0])\n",
    "alpha"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Generate a boxplot of with the p-value for the McNemar coefficient for each pair of comparisons"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [],
   "source": [
    "sns.set(rc={'figure.figsize': (14, 7)})\n",
    "sns.set(font_scale=1.5)\n",
    "sns.set_style('whitegrid')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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uyomJkZxcXFavXq1hgwZIsk2XPizzz7T1atX7T2WFStWdApu3t7eysvLu+37eXt7q06dOjp+/Phvrt3Pz0/Tpk1TTEyM/vjHP2revHmSbL2rEydOtF8LnN9LPHfuXB06dMjQe/j6+urixYtO66xWqzIzM+3P77vvPl24cKHAvvkhs0qVKvY/u8rNavjpp5/k6+t70/28vb3l4eGh5557TpGRkYW+Ltm+QIiOjlZ0dLQuXryo3bt3a9myZRozZoz27t1b4D7cAAAAAHAnlPis1z/++KNee+01tWvXToMGDZIkDRs2TK1atVJ8fLyOHj0qSRoxYoRycnL06quvFhi6LNl6Jc+dK9oQxStXrujYsWOF9sAWR/fu3dW+fXtt3rzZPsv0V199JYvFotGjR9tDcl5enlJTU286lPxmwsLCtGvXLqcZvf/+9787/Rxat26tgwcPKj093b7OYrFo27ZtCgoKKtb12Ea1bt1au3btsg8Zl2zDx3ft2nXLoTeVK1dW06ZN9eOPPyooKMi+1KtXTwsWLNDhw4clSQMGDNCsWbMk2Xqkn376aUVHRyszM1PXrl2T9H+98QAAAABwp5RoCsnJydErr7yi8uXL680337TfWsnT01Nz5sxRmTJlNH78eOXk5Khx48aaO3euUlJS1LdvX61Zs0b79u3T7t279dZbb6lr1646ffq0unXr5vQe6enpOnTokH1JSUnR888/r+vXr2vYsGEldi6TJ09W2bJlNWvWLOXl5dmvA545c6b27dunTz/9VEOHDtX3338vq9VapNtY5Rs1apSys7M1YsQI7dq1Sx988IH9/fINHTpUlStX1uDBg7V582bt2rVLzz//vI4dO+Y06ZcrjRo1SleuXNGQIUO0Y8cObd++XUOGDNHVq1ftk4fdTExMjHbt2qVJkyZpz549Sk5O1rBhw/TPf/7TPnlaaGio1q9fr2XLlumLL77Qpk2btHLlSoWFhdlv+XXffffpq6++0pdffllgiDsAAAAAuEKJDr2Oi4vTt99+q8WLF+uBBx5weq1WrVqaMmWKJk+erPj4eE2aNEmRkZEKDAzUunXr9O6779p7T+vVq6f+/fsrKipKNWvWdDrOhg0btGHDBkm22al9fHzUtGlTLV++XK1bty6xc/H399egQYP0zjvvaP369Ro4cKCmTZumlStX6pNPPpGfn5/atGmj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ZHYZAIBShKAMAAAAAIADgjIAAAAAAA4IygAAAAAAOCAoAwAAU0RERGjKlCn64IMP1LlzZwUHB6t///7at2/fLfebPn26mjZtqoyMDKf1165dU3BwsGJjYyVJVqtV69ev1zPPPKMWLVooKChI3bt315/+9CdZrdZb1lXYNcuFrf/qq680dOhQtWjRQi1atNBzzz2nf/3rX0X9EQAASimCMgAAME1qaqpef/11devWTTExMcrIyNDw4cO1f//+m+7Tq1cv5eXl6dNPP3Vav2vXLl27dk29e/eWJC1YsEAzZsxQgwYNFBsbq1deeUXly5fXvHnz9NFHH/3m2vfu3atBgwYpKytLMTExeuGFF3TmzBlFR0frwIEDv/n4AADzlDG7AAAAcO86c+aMFi9erC5dukiS+vTpo27dumnevHnasGFDofuEhITo4Ycf1rZt2xQVFWVfv2XLFj3wwANq06aNbty4obVr1+p3v/ud3nzzTfs2v//97xUWFqZPP/1UTz31VLHrtlgsmj59uoKCgrR27Vp5eXlJkgYOHKgnn3xSs2bNKpEwDgAwBz3KAADANP7+/vaQLElVq1ZVnz59dPjwYV28eLHQfTw8PNSzZ099+eWX9m2uXLmiPXv2qGfPnvL09FTZsmXtvdWOLl26pMqVK+vq1au/qe5///vfOnnypLp06aLMzExlZGQoIyNDv/zyizp16qTvvvtO6enpv+k9AADmoUcZAACYpkGDBgXW1alTR1arVadPn1a1atUK3a9Xr15KTEzU9u3bFRUVpeTkZF2/fl29evWyb1O2bFl99tln2rlzp3744QcdP35cmZmZknTLa5SL4sSJE5KkuXPnau7cuYVuc/bsWdWsWfM3vQ8AwBwEZQAAYJqyZcsWWJeXlydJ9uHMhWnYsKECAgK0detWRUVFaevWrapXr54effRRSbYg/P/+3//T5s2bFRISohYtWqhfv35q3bq1Bg8eXKxa8+uSbEOvJSkmJkbBwcGFbu/v71+s9wEAmI+gDAAATJPfM+vo+PHj8vLyUq1atW65b69evTR//nydPHlSe/fu1QsvvGB/7cCBA9q8ebNefPFFxcTE2Nfn5ubq8uXLql279k2P6+npqZycHKd1ubm5unTpkh555BFJ0sMPPyxJqlSpkh577DGnbf/1r38pMzNTFSpUuGX9AIDSi2uUAQCAab7++msdOnTI/vzChQvatGmT2rZtq/vvv/+W+/bs2VMWi0V//OMfdePGDadh15cvX5ZUcGj3+++/r2vXrik3N/emx/Xz89MPP/ygX375xb4uJSVF169ftz8PDAzUAw88oDVr1ig7O9u+/sqVKxo7dqxiY2Nv2SMOACjd6FEGAACmKVeunEaMGKHBgwerQoUKevfdd2WxWDRhwoTb7vvggw+qdevW2rVrl4KDg+29vZLUokULVa5cWbNnz9aZM2d033336YsvvtCWLVtUvnx5p3D7az179tTMmTM1fPhw9e7dW8ePH9f7779v70WWbEPGX331VY0dO1ZPP/20nnnmGZUvX14ffPCBzpw5o7i4OJUpw8csALhb0aMMAABMExwcrHHjxun999/X4sWLVb9+fa1fv16NGzcu0v75vcg9e/Z0Wu/n56c//elPql27tpYsWaL4+HidOXNG8fHxGjBggP773//qwoULhR5zwIABGj16tE6dOqWZM2dq//79SkhIUMOGDZ2269atm9555x3VqFFDS5Ys0cKFC+Xt7a2lS5cWqAcAcHfxsP7WaR8BAACKISIiQg8//LDWrFljdikAADihRxkAAAAAAAcEZQAAAAAAHBCUAQAAAABwwDXKAAAAAAA4oEcZAAAAAAAHBGUAAAAAABwQlAEAAAAAcEBQBgAAAADAAUEZAAAAAAAHBGUAAAAAABz8f+T3kHDUY8beAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1008x504 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.boxplot(x=\"p_value\",y=\"Combo\",data=mc_df)\n",
    "ax.set(ylabel=\"\",xlabel=\"p value\")\n",
    "_ = ax.axvline(alpha,c=\"red\",ls=\"--\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 6. Friedman's Test with Mann-Whitney Post-hoc\n",
    "\n",
    "We can't do ANOVA because our samples are not independent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "FriedmanchisquareResult(statistic=7.200000000000003, pvalue=0.02732372244729252)"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "auc_dict = {}\n",
    "for k,v in auc_ci_df.groupby(\"Method\"):\n",
    "    auc_dict[k] = v.AUC\n",
    "stats.friedmanchisquare(*auc_dict.values())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.set(rc={'figure.figsize':(8,6)},font_scale=1.5)\n",
    "pc = sp.posthoc_mannwhitney(auc_ci_df,val_col=\"AUC\",group_col=\"Method\",p_adjust='holm')\n",
    "heatmap_args = {'linewidths': 0.25, 'linecolor': '0.5', 'clip_on': False, 'square': True, 'cbar_ax_bbox': [0.80, 0.35, 0.04, 0.3]}\n",
    "_ = sp.sign_plot(pc, **heatmap_args)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
